package com.example.demo.sensitive.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.sensitive.entity.CheckResult;
import lombok.Data;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @ClassName CheckResultMapper
 * @Description 检查结果数据访问层
 * @Author System
 * @Date 2025/9/19
 **/
@Mapper
public interface CheckResultMapper extends BaseMapper<CheckResult> {

    /**
     * 分页查询检查结果
     */
    Page<CheckResult> selectPageWithCondition(Page<CheckResult> page,
                                             @Param("taskId") Long taskId,
                                             @Param("category") String category,
                                             @Param("level") Integer level,
                                             @Param("processStatus") String processStatus,
                                             @Param("keyword") String keyword);

    /**
     * 根据任务ID查询结果
     */
    List<CheckResult> selectByTaskId(@Param("taskId") Long taskId);

    /**
     * 查询高风险结果
     */
    List<CheckResult> selectHighRiskResults(@Param("taskId") Long taskId);

    /**
     * 统计任务结果
     */
    TaskResultStatistics selectResultStatistics(@Param("taskId") Long taskId);

    /**
     * 根据表名和列名统计
     */
    List<TableColumnStatistics> selectTableColumnStatistics(@Param("taskId") Long taskId);

    /**
     * 批量更新处理状态
     */
    int batchUpdateProcessStatus(@Param("ids") List<Long> ids,
                                @Param("processStatus") String processStatus,
                                @Param("processNote") String processNote,
                                @Param("processBy") Long processBy);

    /**
     * 批量插入检查结果
     */
    int batchInsert(@Param("list") List<CheckResult> list);

    /**
     * 删除任务相关结果
     */
    int deleteByTaskId(@Param("taskId") Long taskId);

    /**
     * 清理过期结果
     */
    int cleanExpiredResults(@Param("days") int days);

    /**
     * 任务结果统计内部类
     */
    @Data
    class TaskResultStatistics {
        private Integer totalResults;
        private Integer highRiskResults;
        private Integer pendingResults;
        private Integer processedResults;
        private Integer falsePositiveResults;
    }

    /**
     * 表列统计内部类
     */
    @Data
    class TableColumnStatistics {
        private String tableName;
        private String columnName;
        private Integer resultCount;
        private Integer highRiskCount;
    }
}
